package com.zhu.instructions.math;

import com.zhu.instructions.base.NoOperandsInstruction;
import com.zhu.rtda.Frame;
import com.zhu.rtda.OperandStack;

/**
 * IAND 指令
 *
 * 操作码：and (int)
 * 栈行为：value1, value2 → result
 *
 * 功能：从操作数栈中弹出两个 int 类型的操作数，
 * 计算它们的按位与（&），并将结果压回栈顶。
 *
 * 示例：
 *   value1 = 5  (二进制: 101)
 *   value2 = 3  (二进制: 011)
 *   结果     = 1  (二进制: 001)
 */
public class IAND extends NoOperandsInstruction {

    @Override
    public void execute(Frame frame) {
        // 获取操作数栈
        OperandStack operandStack = frame.getOperandStack();
        // 弹出两个 int 值（注意：后入先出，v2 是后压入的）
        int v2 = operandStack.popInt();
        int v1 = operandStack.popInt();

        // 执行按位与操作
        int result = v1 & v2;

        // 将结果压回栈顶
        operandStack.pushInt(result);
    }
}
